5장 타입 활용하기
1. 조건부 타입
조건에 따라 다른 타입의 형태를 반환해야 할 때 사용한다.Condition ? A : B
삼항 연산자의 형태를 가진다. 중복되는 타입 코드를 제거하고 정확한 타입 추론을 할 수 있다.
1. extend와 제네릭을 활용한 조건부 타입
T extends U ? X : Y
타입 T
를 U
에 할당할 수 있으면 X
타입, 아니면 Y
타입으로 결정됨을 의미한다.
- 제너릭을 활용해 넘길 수 있는 값을 제한한다.
interface Bank {
financialCode: string;
companyName: string;
name: string;
fullName: string;
}
interface Card {
financialCode: string;
companyName: string;
name: string;
appCardType?: string;
}
type PayMethod<T> = T extends "card" ? Card : Bank;
type CardPayMethodType = PayMethod<"card">;
type BankPayMethodType = PayMethod<"bank">;
- 제네릭을 사용해 타입을 제한하고
extend
를 사용해 제네릭이 받을 수 있는 타입을 제한한다.
type PayMethodType<T extends "card" | "appcard" | "bank"> = T extends
| "card"
| "appcard"
? Card
: Bank;
export const useGetRegisteredList = <T extends "card" | "appcard" | "bank">(
type: T
): UseQueryResult<PayMethodType<T>[]> => {
const url = `baeminpay/codes/${type === "appcard" ? "card" : type}`;
const fetcher = fetcherFactory<PayMethodType<T>[]>({
onSuccess: (res) => {
const usablePocketList =
res?.filter(
(pocket: PocketInfo<Card> | PocketInfo<Bank>) =>
pocket?.useType === "USE"
) ?? [];
return usablePocketList;
},
});
const result = useCommonQuery<PayMethodType<T>[]>(url, undefined, fetcher);
return result;
};